"""
    这是接口关键字驱动类,用于提供自动化接口测试的关键字方法
    接口中常用的关键字：
    1.请求方法：get、post、
    2.结婚Allure报告的装饰器，@Allure.step
     Allure报告可直接捕捉你的参数的具体信息，让报告更详细
    3.报告需求进行断言封装：jsonpath、数据断言
    4、加解密的封装
"""
import json

import allure
import jsonpath
import pymysql
import requests


# 工具类/关键字驱动类/基类
class ApiKey():
    @allure.step("发送get请求")
    def get(self, url, params=None, **kwargs):
        # print("======get请求开始======")
        return requests.get(url=url, params=params, **kwargs)

    def post(self, **kwargs):
        # print("======post请求开始======")
        return requests.post(**kwargs)

    # 基于jsonpath获取数据的关键字
    @allure.step("发送post请求")
    def get_text(self, response, key):
        """
        :param response: 响应报文，主流是json格式
        :param key: json的表达式
        :return: key对应的值,json路径
        """
        dict_data = json.loads(response)  # json格式报文转成字
        value_list = jsonpath.jsonpath(dict_data, key)  # jsonpath获取的是list
        return value_list[0]  # 获取第一个值

    # 数据库检查关键字
    @allure.step("数据库检查")
    def sqlCheck(self, sql):
        # 1.建立连接
        conn = pymysql.connect(
            host='shop-xo.hctestedu.com',
            port=3306,
            user='api_test',
            passwd='Aa9999!',
            database='shopxo_hctested',
            charset='utf8')
        # 2.创建游标(创建数据库对象)
        cmd = conn.cursor()
        # 3.准备执行sql语句
        cmd.execute(query=sql)
        # 4.获取查询结果
        results = cmd.fetchone()[0]
        # 5.关闭数据库连接
        conn.close()
        return results




if __name__ == '__main__':
    ak = ApiKey()
    resquests = ak.sqlCheck("select username from sxo_admin")
    print(resquests)
